package com.example.SpringModelManage.mapper;

import com.example.SpringModelManage.entity.Dataset;
import com.example.SpringModelManage.entity.Model;
import feign.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * Class Description
 *
 * @author hulilei
 * @version 1.0.0
 * @date 2021/10/24 14:59
 */
@Component
public interface ModelMapper {
    /**
     * 查询模型信息（根据模型ID）
     */
    public Model selectByModelId(@Param("modelId") String modelId);

    /**
     * 分页展示模型信息
     * @startIndex：开始的索引（从0开始）
     * @pageSize：页面的大小
     */
    @Select("select * from model_info where develop_id=#{developId} limit #{startIndex},#{pageSize}")
    public List<Model> getModelByLimit(
            @Param("developId") String developId,
            @Param("startIndex") Integer startIndex,
            @Param("pageSize") Integer pageSize
    );

    /**
     * 根据各项条件，筛选模型信息
     */
    public List<Model> getModelByLimitSearch(
            @Param("developId") String developId,
            @Param("modelId") String modelId,
            @Param("modelName") String modelName,
            @Param("modelVersion") String modelVersion,
            @Param("modelType") String modelType,
            @Param("modelStatus") String modelStatus,
            @Param("startIndex") Integer startIndex,
            @Param("pageSize") Integer pageSize
    );

    /**
     * 创建模型
     */
    public void createModel(
            @Param("developId") String developId,
            @Param("modelId") String modelId,
            @Param("umId") String umId,
            @Param("modelName") String modelName,
            @Param("modelType") String modelType,
            @Param("modelLanguage") String modelLanguage,
            @Param("modelDescribe") String modelDescribe,
            @Param("modelCreateTime") String modelCreateTime,
            @Param("modelVersion") String modelVersion,
            @Param("modelStatus") String modelStatus
    );

    /**
     * 根据开发者ID，获取模型ID和名称
     *
     * @modelStatus：模型状态
     */
    @Select("select model_id,model_name from model_info where develop_id = #{developId} and model_status = #{modelStatus}")
    public List<Model> getModelNameByDevelopId(
            @Param("developId") String developId,
            @Param("modelStatus") String modelStatus
    );

    /**
     * 上传模型文件
     */
    public void uploadModelFile();
    /**
     * 上传模型依赖文件
     */
    public void uploadRequirementFile();
    /**
     * 上传功能说明书
     */
    public void uploadSpecification();

    /**
     * 上传模型的操作
     */
    public void uploadModel(
            @Param("modelId") String modelId,
            @Param("datasetId") String datasetId,
            @Param("mdId") String mdId,
            @Param("modelStatus") String modelStatus,
            @Param("modelFilePath") String modelFilePath,
            @Param("modelRequirementPath") String modelRequirementPath,
            @Param("modelSpecificationPath") String modelSpecificationPath,
            @Param("modelUploadTime") String modelUploadTime
    );

    /**
     * 获取模型指导价（根据模型ID）
     */
    @Select("select model_guide_price from model_info where model_id = #{modelId}")
    public double getModelGuidePrice(
            @Param("modelId") String modelId
    );

    /**
     * 发布模型
     */
    public void releaseModel(
            @Param("modelId") String modelId,
            @Param("modelPrice") String modelPrice,
            @Param("modelStatus") String modelStatus,
            @Param("modelReleaseTime") String modelReleaseTime
    );

    /**
     * 根据模型ID，获取模型版本
     */
    @Select("select model_version from model_info where model_id = #{modelId}")
    public String getModelVersionById(@Param("modelId") String modelId);

    /**
     * 更新模型文件
     */
    public void updateModelFile(
            @Param("developId") String developId,
            @Param("modelId") String modelId,
            @Param("modelVersion") String modelVersion,
            @Param("modelFilePath") String modelFilePath
    );

    /**
     * 根据模型ID，获取模型的数据集名称
     */
    public List<String> getDatasetNameByModelId(
            @Param("modelId") String modelId
    );

    /**
     * 根据模型ID，获取模型的数据集ID和名称
     */
    public List<Dataset> getModelDatasetByModelId(
            // @Param("developId") String developId,
            @Param("modelId") String modelId
    );

    /**
     * 更新模型数据集(的绑定关系)
     */
    public void updateModelDataset(
            @Param("modelId") String modelId,
            @Param("modelUpdateTime") String modelUpdateTime,
            @Param("operator") String operator, // 操作：删除/添加
            @Param("datasetId") String datasetId, // 数据集ID
            @Param("mdId") String mdId // model和dataset的联合ID
    );

    /**
     * 获取所有的数据集（根据开发者ID）
     */
    @Select("select * from dataset_info where develop_id=#{developId}")
    public List<Dataset> getDatasetById(
            @Param("developId") String developId
    );

    /**
     * 获取数据集（根据开发者ID和筛选条件）
     */
    public List<Dataset> getDatasetByLimitSearch(
            @Param("developId") String developId,
            @Param("datasetId") String datasetId,
            @Param("datasetName") String datasetName,
            @Param("datasetType") String datasetType,
            @Param("datasetVersion") String datasetVersion,
            @Param("startIndex") Integer startIndex,
            @Param("pageSize") Integer pageSize
    );

    /**
     * 上传数据集文件
     */
    public void uploadDatasetFile(

    );

    /**
     * 上传数据集的操作
     */
    public void uploadDataset(
            @Param("developId") String developId,
            @Param("datasetId") String datasetId,
            @Param("datasetName") String datasetName,
            @Param("datasetVersion") String datasetVersion,
            @Param("datasetUploadTime") String datasetUploadTime,
            @Param("datasetType") String datasetType,
            @Param("datasetFilePath") String datasetFilePath
    );

    /**
     * 重新上传数据集
     */
    public void updateDatasetFile(

    );

    /**
     * 更新数据集的操作
     */
    public void updateDataset(
            @Param("datasetId") String datasetId,
            @Param("datasetFilePath") String datasetFilePath,
            @Param("datasetUpdateTime") String datasetUpdateTime,
            @Param("datasetVersion") String datasetVersion
    );

}
